﻿using NHibernate;
using NHibernate.Cfg;
using Search4.Domain.Entity;
using System;
using System.Linq;
using NHibernate;
using NHibernate.Linq;

namespace Search4.Domain.Repository
{
    public class UsuarioRepository
    {
        private ISessionFactory sessionFactory = new Configuration()
                        .Configure()
                        .BuildSessionFactory();

        public void Salvar(Usuario usuario)
        {   
            using(var session = sessionFactory.OpenSession())
            {
                session.BeginTransaction();
                try
                {
                    session.SaveOrUpdate(usuario);
                    session.Transaction.Commit();
                    session.Flush();
                }
                catch
                {
                    throw;
                }
            }
        }

        public Usuario ObterPeloIdentificador(Int32 id)
        {
            using (var session = sessionFactory.OpenSession())
            {
                return session.Get<Usuario>(id);
            }
        }

        public void Excluir(Usuario usuario)
        {
            using (var session = sessionFactory.OpenSession())
            {
                session.BeginTransaction();
                session.Delete(usuario);
                session.Transaction.Commit();
            }
        }

        public Usuario ObterPeloEmail(String email)
        {
            using (var session = sessionFactory.OpenSession())
            { 
                return (from usuario in session.Query<Usuario>() 
                            where usuario.Email == email 
                                select usuario).FirstOrDefault();
            }
        }

        public Usuario ObterPorEmailESenha(String email, Int32 senha)
        {
            using (var session = sessionFactory.OpenSession())
            {
                return (from usuario in session.Query<Usuario>()
                        where usuario.Email == email && usuario.Senha == senha
                        select usuario).FirstOrDefault();
            }
        }
    }
}
